import sys
from PyQt5.QtWidgets import QApplication, QVBoxLayout, QWidget, QPushButton, QGroupBox, QMainWindow
from PyQt5.QtCore import Qt

'''
垂直布局器demo
布局器本身不会显示，只有在某个窗口获上层控件中才能显示，都会存在一个something.setlayout(layout)
'''
class MyWindow(QWidget):
    def __init__(self):
        # 切记一定要调用父类的__init__方法，因为它里面有很多对UI空间的初始化操作
        super().__init__()

        # 设置大小
        self.resize(300, 300)
        # 设置标题
        self.setWindowTitle("垂直布局")

        # 垂直布局
        # 该函数的参数是父类，这里的参数是self，相当于把该布局器添加到了窗口中，
        # 若没有加self，则需要在后面使用self.setLayout(layout)把其添加到窗口
        self.layout = QVBoxLayout(self)

        # 作用是在布局器中增加一个伸缩量，里面的参数表示QSpacerItem的个数，默认值为零
        # 会将你放在layout中的空间压缩成默认的大小
        # 下面的笔试1：1：1：2
        # 多个弹簧之间的参数相当于是比例系数
        # layout.addStretch(1)

        # 按钮1 形状是长方形，文本标题或图标可以显示在长方形上
        self.btn1 = QPushButton("按钮1")
        # btn1.resize(30,30)
        # 添加到布局器中，不用添加副对象了
        # layout.addWidget(btn1, Qt.AlignmentFlag.AlignTop)
        self.layout.addWidget(self.btn1)

        # layout.addStretch(1)

        # 按钮2
        self.btn2 = QPushButton("按钮2")
        # 添加到布局器
        self.layout.addWidget(self.btn2)

        # layout.addStretch(1)

        # 按钮3
        self.btn3 = QPushButton("按钮3")
        # 添加到布局器
        self.layout.addWidget(self.btn3)
        self.btn1.clicked.connect(self.add_btn)

        # layout.addStretch(2)
    def add_btn(self):
        self.but4 = QPushButton("按钮4")
        self.layout.addWidget(self.btn4)



if __name__ == '__main__':
    app = QApplication(sys.argv)

    # 创建一个QWidget子类
    w = MyWindow()
    w.show()

    app.exec()
